//引入下面这个，是为了调用window的defaultRouteName拿到route判断跳转哪个界面
import 'dart:ui';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:my_flutter/FlutterFirst.dart';

void main() => runApp(_widgetForRoute(window.defaultRouteName));

//根据原生给的名字，确定显示那个界面
Widget _widgetForRoute(String route) {
  print('路由: ' + route);
  switch (route) {
    case 'myApp':
      return MyApp();
    case 'home':
      return FlutterFirst();
    default:
      return MyApp();
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'MyApp',
      theme: ThemeData(
        primarySwatch: Colors.pink,
      ),
      routes: <String, WidgetBuilder>{
        "/home": (BuildContext context) => FlutterFirst(),
      },
      home: MyHomePage(
        title: 'flutter页面-->MyHomePage',
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({
    Key key,
    this.title,
  }) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver {
  //创建一个给native的channel (类似iOS的通知）
  static const methodChannel = const MethodChannel('flutter_call_native');

  //告诉ios，需要跳转到下一页了。ios自己跳,并传给ios一个字符串
  _iosPushToVC() async {
    //invokeMethod:两个参数Method:方法名（两端要统一），arguments：此方法名下需要传的参数
    print('flutter call native start...');
    await methodChannel.invokeMethod('goto-page', 'flutter传的字符串-hello native');
    print('flutter call native end...');
  }

  //传给ios一个map
  _iosGetMap() async {
    Map<String, dynamic> value = {"code": "200", "data": 'flutter data'};
    await methodChannel.invokeMapMethod('flutter-params', value);
  }

  //拿到ios的返回值
  _getIosValue() async {
    dynamic result;
    print('start get... ');
    try {
      result = await methodChannel.invokeMethod('native-call-flutter');
    } on PlatformException {
      result = "error";
    }
    print('get native result: ' + result);
    if (result is String) {
      showModalBottomSheet(
          context: context,
          builder: (BuildContext context) {
            return Container(
              child: Center(
                child: Text(
                  result,
                  style: TextStyle(color: Colors.brown),
                  textAlign: TextAlign.center,
                ),
              ),
              height: 60,
            );
          });
    }
  }

  @override
  void initState() {
    super.initState();
    //添加观察者
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    print(state);
    if (state != AppLifecycleState.resumed) {
      methodChannel.invokeMethod(
          'changeNavStatus', 'didChangeAppLifecycleState:${state}-show');
    } else {
      methodChannel.invokeMethod(
          'changeNavStatus', 'didChangeAppLifecycleState:${state}-hiden');
    }
  }

  @override
  void dispose() {
    // TODO: implement dispose
    WidgetsBinding.instance.removeObserver(this); //销毁观察者
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
        leading: InkWell(
          onTap: () {
            print('backTo 1...');
            methodChannel.invokeMethod('backToViewController');
          },
          child: Icon(
            Icons.arrow_back,
            color: Colors.white,
          ),
        ),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            InkWell(
              onTap: _iosPushToVC,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Icon(Icons.forward),
                  Text('跳转ios新界面11',
                      style: new TextStyle(
                          fontSize: 28,
                          color: Colors.yellow,
                          height: 2,
                          backgroundColor: Colors.green)),
                ],
              ),
            ),
            InkWell(
                onTap: _iosGetMap,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Icon(Icons.forward),
                    Text('传参，参数是map',
                        style: new TextStyle(
                            fontSize: 20, color: Colors.red, height: 2)),
                  ],
                )),
            InkWell(
                onTap: _getIosValue,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    Icon(Icons.forward),
                    Text('接收iOS返回的内容',
                        style: new TextStyle(
                            fontSize: 20, color: Colors.red, height: 2)),
                  ],
                )),
          ],
        ),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

//void main() => runApp(widgetForRoute(ui.window.defaultRouteName));
//void main() => runApp(NewRoute());

//
// class MyApp extends StatelessWidget {
//   // This widget is the root of your application.
//   @override
//   Widget build(BuildContext context) {
//     return MaterialApp(
//       title: 'Flutter Demo',
//       theme: ThemeData(
//         // This is the theme of your application.
//         //
//         // Try running your application with "flutter run". You'll see the
//         // application has a blue toolbar. Then, without quitting the app, try
//         // changing the primarySwatch below to Colors.green and then invoke
//         // "hot reload" (press "r" in the console where you ran "flutter run",
//         // or press Run > Flutter Hot Reload in a Flutter IDE). Notice that the
//         // counter didn't reset back to zero; the application is not restarted.
//         primarySwatch: Colors.blue,
//       ),
//       home: MyHomePage(title: 'Flutter Demo Home Page'),
//     );
//   }
// }
//
// class MyHomePage extends StatefulWidget {
//   MyHomePage({Key key, this.title}) : super(key: key);
//
//   // This widget is the home page of your application. It is stateful, meaning
//   // that it has a State object (defined below) that contains fields that affect
//   // how it looks.
//
//   // This class is the configuration for the state. It holds the values (in this
//   // case the title) provided by the parent (in this case the App widget) and
//   // used by the build method of the State. Fields in a Widget subclass are
//   // always marked "final".
//
//   final String title;
//
//   @override
//   _MyHomePageState createState() => _MyHomePageState();
// }
//
// class _MyHomePageState extends State<MyHomePage> {
//   int _counter = 0;
//
//   void _incrementCounter() {
//     setState(() {
//       // This call to setState tells the Flutter framework that something has
//       // changed in this State, which causes it to rerun the build method below
//       // so that the display can reflect the updated values. If we changed
//       // _counter without calling setState(), then the build method would not be
//       // called again, and so nothing would appear to happen.
//       _counter++;
//     });
//   }
//
//   @override
//   Widget build(BuildContext context) {
//     // This method is rerun every time setState is called, for instance as done
//     // by the _incrementCounter method above.
//     //
//     // The Flutter framework has been optimized to make rerunning build methods
//     // fast, so that you can just rebuild anything that needs updating rather
//     // than having to individually change instances of widgets.
//     return Scaffold(
//       appBar: AppBar(
//         // Here we take the value from the MyHomePage object that was created by
//         // the App.build method, and use it to set our appbar title.
//         title: Text(widget.title),
//       ),
//       body: Center(
//         // Center is a layout widget. It takes a single child and positions it
//         // in the middle of the parent.
//         child: Column(
//           mainAxisAlignment: MainAxisAlignment.center,
//           children: <Widget>[
//             Text(
//               '点击增加:',
//             ),
//             Text(
//               '$_counter',
//               style: Theme.of(context).textTheme.headline4,
//             ),
//             TextButton(
//               child: Text("打开新路由"),
//
//               onPressed: () {
//                 //导航到新路由
//                 Navigator.push( context,
//                     MaterialPageRoute(builder: (context) {
//                       return NewRoute();
//                     }));
//               },
//             ),
//           ],
//         ),
//       ),
//       floatingActionButton: FloatingActionButton(
//         onPressed: _incrementCounter,
//         tooltip: 'Increment',
//         child: Icon(Icons.add),
//       ), // This trailing comma makes auto-formatting nicer for build methods.
//     );
//   }
// }
